Artifact Registryにローカルで作成したコンテナイメージをpushしてCloud Run ジョブをデプロイする
日々Cloud Run ジョブに向き合っているデータアナリティクス事業本部の根本です。
今回はCloud Run ジョブのデプロイを、ローカルで作成したコンテナイメージを元に行なってみました。
やりたいこと
ローカルでDockerイメージを作成して、Artifact Registryにpushして、そのイメージを元にジョブを作る、というのがやりたいことです。
イメージ図は以下となります。
それでは粛々とやってみます。
やってみる
リポジトリ作成
まずはArtifact Registryにリポジトリを作成します。
gcloud artifacts repositories create test-repository --locations=asia-northeast1 --repository-format=docker
ポイントとしては、リポジトリはロケーション単位で作成されるのでlocations
で作りたいロケーションを指定します。
またリポジトリに保存するファイル形式によってrepository-format
を選択します。今回はDockerなのでdocker
を指定しています。
Dockerの認証情報設定
以下のコマンドを実行します。
gcloud auth configure-docker asia-northeast1-docker.pkg.dev
上記コマンドは、gcloudコマンドを使用して指定したDockerレジストリに対するDockerの認証情報を設定するためのコマンドです。
ロケーション名-docker.pkg.dev
は、pushしたいArtifact Registryのドメインを指します。
またArtifact RegistryのDocker形式のリポジトリは以下のドメイン形式となります。
"ロケーション名"-docker.pkg.dev
ドメインに関しては、リポジトリ作成後にAritfact Registryの画面からでも確認することができます(下記画像の赤枠)。
実行するコマンドでは今回作成したArtifact Registryのロケーションのasia-northeast1
を指定しています。
このコマンドを実行すると、DockerがArtifact Registryの特定のレジストリにアクセスするための認証情報が設定されます。
よって、Docker CLIでGoogle CloudのArtifact Registryに対して認証されるようになり、イメージのpushができるようになります。
Dockerイメージ作成とpush
実行したらHello Worldと出力するDockerfileを作成します。
FROM google/cloud-sdk:latest CMD ["echo", "Hello World!"]
作成したDockerfileが保存されているディレクトリでDockerイメージ作成のため以下コマンドを実行します。
docker build -t asia-northeast1-docker.pkg.dev/プロジェクトID/test-repository/hello-world-image .
イメージ作成に成功したら、Artifact Registryへ作成したイメージをpushします。
docker push asia-northeast1-docker.pkg.dev/プロジェクトID/test-repository/hello-world-image
pushできたら、一応gcloudコマンドでイメージがリポジトリに存在するか確認してみます。
gcloud artifacts docker images list asia-northeast1-docker.pkg.dev/プロジェクトID/test-repository
存在していれば問題なくpushできています。
Artifact Registryのイメージを指定してジョブを作成する
イメージの作成とpushができたので、ジョブをデプロイします。
gcloud run jobs deploy hello-world-run \ --image asia-northeast1-docker.pkg.dev/プロジェクトID/test-repository/hello-world-image \ --region=asia-northeast1 \ --tasks=1 \ --cpu=1 \ --max-retries=0 \ --memory=512Mi \ --parallelism=1 \ --task-timeout=600 \ --region asia-northeast1
色々書いていますが、勘所としては--image
オプションです。
こちらでArtifact Registryへpushしたイメージを指定します。
asia-northeast1-docker.pkg.dev/プロジェクトID/test-repository/hello-world-image
このコマンドを実行するとhello-world-runというジョブ名でジョブが作成されます。
ジョブがデプロイできたら、gcloudコマンドで実行してみます。
gcloud run jobs execute hello-world-run --region=asia-northeast1
Cloud Run jobsのコンソールから、該当のジョブのログにHello World!
と出力されていたら成功です。
まとめ
勘所としては以下の3点に注意すれば問題なくできると思います。
- Dockerの認証情報設定
- 作成リポジトリのロケーション
- デプロイ時のimage指定
これらに気をつければ、ローカルのDockerからArtifact Registryへpushが問題なくできます。
また、Cloud Shellで実施する場合も同様の手順で大丈夫です。
この記事がどなたかのお役に立てば嬉しいです。それではまた。
参考
Docker 用の Artifact Registry への認証を構成する
Cloud Run で Python ジョブをビルドして作成する